package com.wzy.ssm.user.controller;

import com.wzy.ssm.user.model.UserLogin;
import com.wzy.ssm.user.model.UserLoginExample;
import com.wzy.ssm.user.service.UserLoginService;
import com.wzy.ssm.util.IdUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

//添加注解
@Controller
public class UserLoginController {

    private UserLoginService userLoginService;

    //通过构造器注入service
    public UserLoginController(UserLoginService userLoginService){
        this.userLoginService=userLoginService;
    }

    //查询数据
    @GetMapping("/user")
    @ResponseBody
    public List<UserLogin> selectUserLogin(){
        //1 构造查询条件
        //1.1 创建查询条件类
        UserLoginExample example = new UserLoginExample();
        //1.2 创建条件构造器
        UserLoginExample.Criteria criteria = example.createCriteria();
        //1.3 通过criteria设置条件
        //criteria.andCurrentStatusEqualTo("0");
        //2 根据条件查询
        List<UserLogin> list = userLoginService.selectByExample(example);

        return list;
    }

    //根据用户类型查询相关用户信息数据
    @GetMapping("/user/{userType}")
    @ResponseBody
    public List<UserLogin> selectUserByUserType(@PathVariable("userType") String userType){
        //1 构造查询条件?
        //1.1 创建查询条件类?
        UserLoginExample example = new UserLoginExample();
        //1.2 创建条件构造器
        UserLoginExample.Criteria criteria = example.createCriteria();
        //1.3 通过criteria设置条件
        criteria.andUserTypeEqualTo(userType);
        //criteria.andCurrentStatusEqualTo("0");
        //2 根据条件查询
        List<UserLogin> list = userLoginService.selectByExample(example);

        return list;
    }

    //添加数据
    @PostMapping("/user")
    @ResponseBody
    public UserLogin insertUser(@RequestBody UserLogin userLogin){
        //准备数据
        //最好自己生成id
        Long id= IdUtil.nextId();
        userLogin.setUserId(id.toString());
        userLoginService.insertSelective(userLogin);

        return userLogin;
    }
    //修改数据
    @PutMapping("/user")
    @ResponseBody
    public UserLogin updateUser(@RequestBody UserLogin userLogin){
        //准备数据
        userLoginService.updateByPrimaryKeySelective(userLogin);
        //只返回修改的字段数据
        //return userLogin;
        //或者,通过主键,从数据库查询完整的数据,然后返回
        return userLoginService.selectByPrimaryKey(userLogin.getUserLoginId());

    }
    //删除数据
    //注意：id的参数类类型 要修改成自己数据库的主键类型（一般为Integer或Long或String类型）
    @DeleteMapping("/user/{id}")
    @ResponseBody
    public String delUser(@PathVariable("id") String userLoginId){

        userLoginService.deleteByPrimaryKey(userLoginId);

        //返回状态码
        return "200";
    }

    //===================
    //复杂查询
    //===================
    //多条件查询用户（and条件）
    @GetMapping("/user/search1")
    @ResponseBody
    public List search1(@RequestParam("userName") String name,
                        @RequestParam("email") String email,
                        @RequestParam("mobile") String mobile){
        UserLoginExample example = new UserLoginExample();
        UserLoginExample.Criteria criteria = example.createCriteria();
        //拼装and查询条件
        if(name !=null && !"".equals(name)){
            criteria.andUserNameEqualTo(name);
        }
        if(email !=null && !"".equals(email)){
            criteria.andEmailEqualTo(email);
        }
        if(mobile != null && !"".equals(mobile)){
            criteria.andMobileEqualTo(mobile);
        }
        List<UserLogin> list = userLoginService.selectByExample(example);

        return list;
    }

    //多条件查询用户(or条件)
    @GetMapping("/user/search2")
    @ResponseBody
    public List<UserLogin> search2(@RequestParam("userName") String name,
                                   @RequestParam("userLoginId") String userLoginId) {
        //1.1
        UserLoginExample example = new UserLoginExample();
        //1.2 创建条件构造器
        UserLoginExample.Criteria criteria = example.createCriteria();

        //拼装or查询条件
        if(name != null && !"".equals(name)){
            //1.3 通过criteria设置条件
            //设置第一个条件：名称包含 name
            criteria.andUserNameLike("%"+ name.trim() + "%");//模糊查询
        }
        if(userLoginId != null && !"".equals(userLoginId)){
            //设置or条件：账号包含 userLoginId
            example.or().andUserLoginIdLike("%"+ userLoginId.trim() + "%");//模糊查询
        }
        //2 根据条件查询
        List<UserLogin> list = userLoginService.selectByExample(example);

        return list;
    }

}
